package com.acceptable.qucun.generic.util.result.error;

import java.util.HashMap;
import java.util.Map;

public enum GenericErrorResult implements BaseErrorResult {
    // 通用错误的代码 首位为2 6位
    // 功能错误
    OPERATION_ERROR("200100", "该功能执行时错误"),

    // 数据错误
    DATA_NOT_EXIST_ERROR("200200", "没有相关数据。"),
    DATA_USAGE_ERROR("200300", "数据传输错误，该数据不能用于此功能。"),
    DATA_FORMAT_ERROR("200400", "格式验证失败, 请检查数据格式。"),
    DATA_CODE_ERROR("200500", "数据加/解密出错，存在非法字符。"),
    DATA_LENGTH_NOT_EQUAL_ERROR("200600", "所用的列表数据的长度不一致。"),

    // 权限
    ACCESS_DENIED_ERROR("200700", "没有权限访问该资源，请先登录。"),

    // 验证码错误
    VERIFY_CODE_NOT_EXIST_ERROR("300110", "验证码错误或过期，请检查输入是否有误或者重新获取验证码。");

    private String code;
    private String msg;
    private static Map<String, GenericErrorResult> resultMap;

    GenericErrorResult(String code, String msg){
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String getMsg() {
        return msg;
    }

    @Override
    public String getCode() {
        return code;
    }

    private static void createMap(){
        if(resultMap == null){
            resultMap = new HashMap<>();
            // 笼统的操作错误
            resultMap.put(OPERATION_ERROR.code, OPERATION_ERROR);

            // 数据错误
            {
                resultMap.put(DATA_NOT_EXIST_ERROR.code, DATA_NOT_EXIST_ERROR);
                resultMap.put(DATA_USAGE_ERROR.code, DATA_USAGE_ERROR);
                resultMap.put(DATA_FORMAT_ERROR.code, DATA_FORMAT_ERROR);
                resultMap.put(DATA_CODE_ERROR.code, DATA_CODE_ERROR);
                resultMap.put(DATA_LENGTH_NOT_EQUAL_ERROR.code, DATA_LENGTH_NOT_EQUAL_ERROR);
                resultMap.put(VERIFY_CODE_NOT_EXIST_ERROR.code, VERIFY_CODE_NOT_EXIST_ERROR);
            }

            // 权限
            {
                resultMap.put(ACCESS_DENIED_ERROR.code, ACCESS_DENIED_ERROR);
            }
        }
    }
    public static GenericErrorResult getErrorResultByCode(String errorCode){
        createMap();
        return resultMap.get(errorCode);
    }

    public static Map<String, GenericErrorResult> getResultMap(){
        createMap();
        return resultMap;
    }
}
